<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>依赖注入</title>
</head>
<body>
<div id="app">
    <parent></parent>
</div>

<template id="child">
    <h1>这是子组件的内容</h1>
    <h2>{{ info }}</h2>
</template>

<template id="parent">
    <child></child>
</template>
<script type="module">
    import {createApp, ref} from "../../../../js/vue.esm-browser.js";
    import {defineComponent, provide, inject} from "../../../../js/vue.esm-browser.js";

    let child = defineComponent(
        {
            template:"#child",
            setup() {
                // inject 第一个参数是接收注入的名称，需要与 provide 函数保持一致
                // inject 函数第二个参数是如果没有提供值时使用的默认值。
                let info = inject("info", "Hi, Vue!");

                return {
                    info
                };
            }
        }
    );

    let parent = defineComponent(
        {
            template: "#parent",
            components:{
                child
            }
        }
    );

    let app = createApp({
        setup() {
            let message = ref("Hello, World")
            // 第一个参数为给子组件提供注入的时候的名称，子组件只要使用这个名称即可获得到数据。
            // 第二个参数为任何类型的数据，会通过注入名称传递给子组件。
            provide("info", message)
            return {}
        },
        components: {
            parent,
        }
    })

    app.mount("#app")
</script>
</body>
</html>